我有一个这样的文件:
1000_Tv178.tif,34.88552709
1000_Tv178.tif,
1000_Tv178.tif,34.66987165
1000_Tv178.tif,
1001_Tv180.tif,65.51335742
1001_Tv180.tif,
1002_Tv184.tif,33.83784863
1002_Tv184.tif,
1002_Tv184.tif,22.82542442
1002_Tv184.tif,
如何使用简单的Bash命令将其设为这样? :
1000_Tv178.tif,34.88552709
1000_Tv178.tif,34.66987165
1001_Tv180.tif,65.51335742
1002_Tv184.tif,33.83784863
1002_Tv184.tif,22.82542442
换句话说,我需要删除所有其他行,从第二行开始。
谢谢!
答案 0 :(得分:5)
awk -F, '$2'
这就是说,打印第二个字段有值的每一行。
如果第二个字段具有值,但只是要排除的空格,请尝试以下操作:
awk -F, '$2~/.*[^[:space:]].*/'`
您也可以使用sed执行此操作:
sed '/,$/d'
其中说,删除以逗号结尾的每一行。我确信有更好的方法,我避免使用sed
。
如果你真的想要明确地删除所有其他行:
awk 'NR%2'
这就是说,打印模数为2的行号不为零的每一行。如果你真的想要删除每一个偶数行,那么它实际上并不重要,它是一个以逗号分隔的文件。< / p>
答案 1 :(得分:4)
awk提供了一种简单的方法
awk 'NR % 2' file.txt
答案 2 :(得分:3)
这可能适合你(GNU sed):
sed '2~2d' file
或:
sed 'n;d' file
答案 3 :(得分:1)
以下是gnu sed
提供的awk
个等效答案。现在,您可以通过指定备份扩展名安全地使用sed
的{{1}}标记:
-i
请注意,sed -n -i.bak 'N;P' file.txt
也可以这样做:
gawk4
结果:
gawk -i inplace -v INPLACE_SUFFIX=".bak" 'NR%2==1' file.txt
答案 4 :(得分:1)
如果OP输入在最后一个数字后不包含空格,或,
可以使用此awk
。
awk '!/,$/'
1000_Tv178.tif,34.88552709
1000_Tv178.tif,34.66987165
1001_Tv180.tif,65.51335742
1002_Tv184.tif,33.83784863
1002_Tv184.tif,22.82542442
但,
制动它之后的任何空间都没有强大。
这应该修复最后一个空格:
awk '!/,[ ]*$/'
答案 5 :(得分:0)
感谢您的帮助,但我也必须做一个解决方法: 将其读入R,然后再将其写出来。然后我安装了awk的GNU版本并使用了gawk'{if((FNR%2)!= 0){print $ 0}}'。所以,如果其他人有同样的问题,试试吧!