最后一栏后的awk和换行符

时间:2015-12-08 17:27:32

标签: bash awk

我有一个输入文件,其样本是:

8101010447 25.09 40n50.76  15e06.74   4.96  999  -----  0.2388 314  6.90 99.00  60   6 81EV00001
8101010929 23.85 42n47.96  12e47.90   8.90  3.0  MCSTI  0.0917 123  0.60  2.80  47  16 81EV00002
8101011100 14.41 40n52.23  15e20.57   7.34  999  -----  0.7021 123  0.40  1.30  67  11 81EV00003

我需要获得最后一列和第四列。我正在使用awk正确获取列,但最后一列在末尾有一个换行符,因此列在不同的行上输出。

我的代码如下:

awk -F' ' '{print $14, $4}' catalog.txt >> bbb.txt

关于我如何做到这一点的任何想法?

最终输出应如下所示:

81EV00001 15e06.74
81EV00002 12e47.99
81EV00003 15e20.57

3 个答案:

答案 0 :(得分:3)

您可以在打印前删除CR个字符:

awk '{ sub("\r", "", $14); print $14, $4; }' catalog.txt >> bbb.txt

sub()函数将一个字符串替换为另一个字符串;在这种情况下,我将第14列中的\r字符替换为空字符串。

答案 1 :(得分:0)

您可以尝试这些方法,以获取字段(awk)并删除不需要的符号(tr):

删除CR:

awk -F' ' '{print $14, $4}' catalog.txt | tr -d '\r' > bbb.txt

删除LF:

awk -F' ' '{print $14, $4}' catalog.txt | tr -d '\n' > bbb.txt

删除CR和LF:

awk -F' ' '{print $14, $4}' catalog.txt | tr -d "\r\n" > bbb.txt

答案 2 :(得分:0)

我在一行\ r \ n位于末尾的DOS文件中遇到了这个问题。因此,最后一列带有\ r,因为awk / gawk中的默认RS为\ n。

解决方案很简单。将RS设置为\ r \ n

RS="\r\n";