ファイルがあります:
AC AF AN
3 0.375 8
3 0.375 8
私が望む出力は次のとおりです。
AC AF AN
AC=3 AF=0.375 AN=8
AC=3 AF=0.375 AN=8
これを行うUnixコマンドはありますか?
答え1
awk '
NR==1 {split($0,a); $1=$1}
NR>1 {for(i=1;i<=NF;i++) $i=a[i]"="$i}
1' OFS='\t' yourfile
説明する:
- 最初のレコード(ヘッダー行)をデフォルトのフィールド区切り文字に基づいて配列に分割し、レコードが新しい出力フィールド区切り
$1
文字として書き込まれるようにします。 - 残りのレコードについては、フィールドを繰り返し、各フィールド値の前にフィールドインデックスに対応する配列要素を追加します。
=
- タブ文字を出力フィールド区切り文字として使用してレコードを印刷します。
答え2
< yourfile \
perl -pale '
$. == 1 and push(@A,@F),next;
$_ = join $", map { "$A[$_]=$F[$_]" } 0..$#F;
' |
column -t
答え3
NR == 1 {
for (i = 1; i <= NF; i++) {
header[i] = $i
printf "%s\t", $i
}
print ""
}
NR > 1 {
for (i = 1; i <= NF; i++) {
printf "%s=%s\t", header[i], $i
}
print ""
}
1. 次のファイルを作成します。awkprogそして上記の内容を貼り付けてください。
2. ファイル名が次のとおりです。データ.txt。
3. 次に実行awk -f awkprog data.txt