簡體   English   中英

awk:打印第一列,然后輸出一些值,然后輸出所有其他列

[英]awk: print first column, then some values, and then all other columns

我想先打印第一列,然后再打印幾列具有固定值的列,例如以下命令:

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

有任何想法嗎?

使用循環遍歷其余列,如下所示:

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
$

編輯1:

$ 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
$

編輯2:

$ 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
$

編輯3:

$ 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

您可以使用sed來實現此目的,方法是將第一個空格替換為所需的字符串。

sed 's/ / 1 2 1 /' file

(要么)

使用awk替換第一個字段( $1 ):

awk '{$1=$1 " 1 2 1"}1' file

(我更喜歡sed解決方案,因為它的字符更少)。

您快到了,只需要將第一列存儲在一個臨時變量中:

{
  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}'

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”替換第二字段,然后第二字段本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM