用于使用awk提取文件行的​​shell脚本

时间:2017-07-10 09:01:05

标签: shell

我希望,所选择的文件行在输出文件中并排打印并用空格分隔。这就是我到目前为止所做的,

用于SAC *中的文件

DO

awk 'FNR==2 {print $4}' $file >>exp 

awk 'FNR==3 {print $4}' $file >>exp

awk 'FNR==4 {print $4}' $file >>exp

awk 'FNR==5 {print $4}' $file >>exp

awk 'FNR==7 {print $4}' $file >>exp

awk 'FNR==8 {print $4}' $file >>exp

awk 'FNR==24 {print $0}' $file >>exp 

done

我的输出是:

XV

AMPY

BHZ

2012-08-15T08:00:00

2013-12-31T23:59:59

我想要输出

XV AMPY BHZ 2012-08-15T08:00:00  2013-12-31T23:59:59

1 个答案:

答案 0 :(得分:0)

首先是测试数据(只有9行,然后):

$ cat file
1 2 3 14
1 2 3 24
1 2 3 34
1 2 3 44
1 2 3 54
1 2 3 64
1 2 3 74
1 2 3 84
1 2 3 94
然后是awk。在shell中不需要for循环,awk可以处理多个文件:

$ awk '
BEGIN { 
    ORS=" "
    a[2];a[3];a[4];a[5];a[7];a[8]  # list of records for which $4 should be outputed
}
FNR in a { print $4 }              # output the $4s
FNR==9 { printf "%s\n",$0 }        # replace 9 with 24
' file file # ...                  # the files you want to process (SAC*)
24 34 44 54 74 84 1 2 3 94
24 34 44 54 74 84 1 2 3 94