[英]iterate over columns and only keep (print) columns in which all values match - 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.