Isa*_*ins 16 linux shell awk csv
我有一个很大的 csv 文件,它看起来像这样:
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,25178
1,2,3,4,5,6,27986
1,2,3,4,5,6,-99
Run Code Online (Sandbox Code Playgroud)
我只想选择第 7 列等于 -99 的行,所以我的输出是:
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
awk -F, '$7 == -99' input.txt > output.txt
awk -F, '{ if ($7 == -99) print $1,$2,$3,$4,$5,$6,$7 }' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
但是他们都返回了一个空的 output.txt。谁能告诉我我做错了什么?谢谢。
Kus*_*nda 12
您在其上运行脚本的文件具有 DOS 行结尾。它可能是在 Windows 机器上创建的。
使用dos2unix
将其转换为一个Unix文本文件。
或者,运行它tr
:
tr -d '\r' <input.txt >input-unix.txt
Run Code Online (Sandbox Code Playgroud)
然后使用input-unix.txt
其他正确的awk
代码。
要修改awk
代码而不是输入文件:
awk -F, '$7 == "-99\r"' input.txt >output.txt
Run Code Online (Sandbox Code Playgroud)
这考虑了行尾的回车。
或者,
awk -F, '$7 + 0 == -99' input.txt >output.txt
Run Code Online (Sandbox Code Playgroud)
这会强制将第 7 列解释为一个数字,从而“删除”回车符。
相似地,
awk -F, 'int($7) == -99' input.txt >output.txt
Run Code Online (Sandbox Code Playgroud)
也会删除\r
.
awk -F, '{if($7==-99)print $0}'
Run Code Online (Sandbox Code Playgroud)
会这样做...