我有两个文件的文件如下所示,我需要根据输出中一行中的第一个值填充字段1中的值。
INPUT:
USA 3Q 2013
4Q 2013
1Q 2014
2Q 2014
3Q 2014
4Q 2014
1Q 2015
2Q 2015
3Q 2015
BRAZIL 3Q 2013
4Q 2013
1Q 2014
2Q 2014
3Q 2014
4Q 2014
1Q 2015
2Q 2015
3Q 2015
输出:
USA 3Q 2013
USA 4Q 2013
USA 1Q 2014
USA 2Q 2014
USA 3Q 2014
USA 4Q 2014
USA 1Q 2015
USA 2Q 2015
USA 3Q 2015
BRAZIL 3Q 2013
BRAZIL 4Q 2013
BRAZIL 1Q 2014
BRAZIL 2Q 2014
BRAZIL 3Q 2014
BRAZIL 4Q 2014
BRAZIL 1Q 2015
BRAZIL 2Q 2015
BRAZIL 3Q 2015
答案 0 :(得分:2)
另一种方式
awk -v OFS="\t" 'NF!=3{$0=x$0}{x=$1=$1}1' file
答案 1 :(得分:1)
例如,你可以使用它:
$ awk 'NF==3 {a=$1; print; next} {print a, $0}' file | column -t
USA 3Q 2013
USA 4Q 2013
USA 1Q 2014
USA 2Q 2014
USA 3Q 2014
USA 4Q 2014
USA 1Q 2015
USA 2Q 2015
USA 3Q 2015
BRAZIL 3Q 2013
BRAZIL 4Q 2013
BRAZIL 1Q 2014
BRAZIL 2Q 2014
BRAZIL 3Q 2014
BRAZIL 4Q 2014
BRAZIL 1Q 2015
BRAZIL 2Q 2015
BRAZIL 3Q 2015
它捕获第一个字段,以防有3个字段。然后,它将它与线的其余部分一起使用。
最后,column -t
格式化以制表符分隔的列
答案 2 :(得分:1)
awk 'NF<3{$0=k $0} {k=$1} 1' file
或者如果您关心使用GNU awk为gensub()保留空格:
$ awk '{sub(/^[[:space:]]+/,k); k=gensub(/([^[:space:]]+[[:space:]]+).*/,"\\1","")} 1' file
USA 3Q 2013
USA 4Q 2013
USA 1Q 2014
USA 2Q 2014
USA 3Q 2014
USA 4Q 2014
USA 1Q 2015
USA 2Q 2015
USA 3Q 2015
BRAZIL 3Q 2013
BRAZIL 4Q 2013
BRAZIL 1Q 2014
BRAZIL 2Q 2014
BRAZIL 3Q 2014
BRAZIL 4Q 2014
BRAZIL 1Q 2015
BRAZIL 2Q 2015
BRAZIL 3Q 2015
其他问题包括:
$ awk '{sub(/^[[:space:]]+/,k); match($0,/[^[:space:]]+[[:space:]]+/); k=substr($0,1,RLENGTH)} 1' file