我使用下面的命令使用前两列连接两个文件。
awk 'NR==FNR{a[$1,$2]=substr($0,3);next} ($1,$2) in a{print $0, a[$1,$2] > "br0102_3.txt"}' br01.txt br02.txt
现在,默认情况下,AWk命令使用空格作为分隔符。但我的文件可能包含两个单词之间的单个空格,例如
文件1:
ABCD TEXT1 TEXT2 123123112312312312312312312312312312
BCDEFG TEXT3TEXT4 133123123123123123123123123125423423
QWERT TEXT5TEXT6 123123123123125456678786789698758567
文件2:
ABCD TEXT1 TEXT2 12312312312312312312312312312
BCDEFG TEXT3TEXT4 31242342342342342342342342343
MNHT TEXT8 TEXT9 31242342342342342342342342343
我希望结果文件为;
ABCD TEXT1 TEXT2 123123112312312312312312312312312312 12312312312312312312312312312
BCDEFG TEXT3TEXT4 133123123123123123123123123125423423 31242342342342342342342342343
QWERT TEXT5TEXT6 123123123123125456678786789698758567
MNHT TEXT8 TEXT9 31242342342342342342342342343
任何提示?
答案 0 :(得分:25)
awk支持正则表达式作为FS
的值,因此您可以指定匹配至少两个空格的正则表达式。类似于-F '[[:space:]][[:space:]]+'
。
$ awk '{print NF}' File2
4
3
4
$ awk -F '[[:space:]][[:space:]]+' '{print NF}' File2
3
3
3
答案 1 :(得分:4)
您正在使用固定宽度字段,因此您应该使用gnu awk FIELDWIDTHS(或类似)来分隔字段,例如如果第二个字段是此文件中从char 8到char 23的15个字符:
$ cat file
abc def ghi klm
AAAAAAAB C D E F G H IJJJJ
abc def ghi klm
$ awk -v FIELDWIDTHS="7 15 4" '{print "<" $2 ">"}' file
<def ghi >
<B C D E F G H I>
< def ghi >
当您的字段之间有1个或零个空格时,任何依赖于字段之间的一定数量空格的解决方案都将失败。
如果要从目标字段中删除前导/尾随空白:
$ awk -v FIELDWIDTHS="7 15 4" '{gsub(/^\s+|\s+$/,"",$2); print "<" $2 ">"}' file
<def ghi>
<B C D E F G H I>
<def ghi>
答案 2 :(得分:1)
如果 field seperator
设置为“”,awk 会自动检测多个空格
因此,这很简单:
awk -F' ' '{ print $2 }'
如果您有一张像上面提到的表格,则获取第二列。