我想打印第一列,然后打印一些具有固定值的列,就像这个命令一样:
awk '{print $1,"1","2","1"}'
然后打印除第一列之外的所有列... 我知道这个命令打印除第一列以外的所有列:
awk '{$1=""; print $0}'
但是这摆脱了第一列。
换句话说,这个:
3 5 2 2
3 5 2 2
3 5 2 2
3 5 2 2
需要成为这个:
3 1 2 1 5 2 2
3 1 2 1 5 2 2
3 1 2 1 5 2 2
3 1 2 1 5 2 2
有什么想法吗?
答案 0 :(得分:2)
使用循环迭代其余列,如下所示:
awk '{print $1,"1","2","1";for(i=2;i<=NF;i++) print $i}'
举个例子:
$echo "3 5 2 2" | awk 'BEGIN{ORS=""}{print $1,"1","2","1";for(i=2;i<=NF;i++) print $i}'
3 1 2 1 5 2 2
$
Edit1:
$ echo "3 5 2 2" | awk 'BEGIN{ORS="\n";OFS="\n"}{print $1,"1","2","1 ";for(i=2;i<=NF;i++) print $i" "}'
3
1
2
1
5
2
2
$
Edit2:
$ echo "3 5 2 2" | awk '{print $1,"1","2","1";for(i=2;i<=NF;i++) print $i}'
3 1 2 1
5
2
2
$
Edit3:
$ echo "3 5 2 2
3 5 2 2
3 5 2 2
3 5 2 2" | awk '{printf("%s %s ", $1,"1 2 1");for(i=2;i<=NF;i++) printf("%s ", $i); printf "\n"}'
3 1 2 1 5 2 2
3 1 2 1 5 2 2
3 1 2 1 5 2 2
3 1 2 1 5 2 2
答案 1 :(得分:1)
您可以使用sed
通过将第一个空格替换为所需的字符串来执行此操作。
sed 's/ / 1 2 1 /' file
(OR)
使用awk
替换第一个字段($1
):
awk '{$1=$1 " 1 2 1"}1' file
(我更喜欢sed
解决方案,因为它的字符较少)。
答案 2 :(得分:1)
你几乎就在那里,你只需要将第一列存储在一个临时变量中:
{
head=$1; # Store $1 in head, used later in printf
$1=""; # Empty $1, so that $0 will not contain first column
printf "%s 1 2 1%s\n", head, $0
}
一个完整的脚本:
echo "3 5 2 2" | awk '{head=$1;$1="";printf "%s 1 2 1%s\n", head, $0}'
答案 3 :(得分:1)
awk
的另一种解决方案:
awk '{sub(/.*/, "1 2 1 "$2, $2)}1' File
3 1 2 1 5 2 2
3 1 2 1 5 2 2
3 1 2 1 5 2 2
3 1 2 1 5 2 2
用“1 2 1”替换第二个字段,然后用第二个字段替换。