列 1 が 0 または 16 のタブ区切りファイルがあります。列 1 が 16 の場合、2 番目と 3 番目の列を、最初の列が 0 である 2 番目と 3 番目の列に平行に移動する必要があります。以下は例です。
0 69 24
0 69 27
16 55 27
0 85 25
16 77 23
に
0 69 24 55 27
0 69 27 77 23
0 85 25
これは で実行できると思いawk
ます。助けていただければ幸いです。ありがとう
列 1 が 0 または 16 のタブ区切りファイルがあります。列 1 が 16 の場合、2 番目と 3 番目の列を、最初の列が 0 である 2 番目と 3 番目の列に平行に移動する必要があります。以下は例です。
0 69 24
0 69 27
16 55 27
0 85 25
16 77 23
に
0 69 24 55 27
0 69 27 77 23
0 85 25
これは で実行できると思いawk
ます。助けていただければ幸いです。ありがとう
これはうまくいくはずです:
awk '
BEGIN{FS=OFS="\t"}
$1==0{zero[++i]=$0;next}
{notzero[++y]=$2"\t"$3}
END{for(c=1;c<NR;c++) print zero[c],notzero[c]}' file
$ cat file
0 69 24
0 69 27
16 55 27
0 85 25
16 77 23
[JS웃:~/Temp]$ awk 'BEGIN{FS=OFS="\t"}$1==0{zero[++i]=$0;next}{notzero[++y]=$2"\t"$3}END{for(c=1;c<NR;c++) print zero[c],notzero[c]}' file
0 69 24 55 27
0 69 27 77 23
0 85 25
Perl の場合:
perl -lane '{!$F[0]&&push(@h,$_)||print(shift @h," $F[1] $F[2]")}
END{print for @h}' input
GNU sedのコード:
sed -nr '/0\s/{H;${x;s/\`\n(.*)/\1/mp};d};/16\s/s/16\s(.*)/\1/;H;g;s/\`\n(.*)\n.*\n(.*)\'/\1 \2/p;g;s/\`\n(.*)(\n.*)\n(.*)\'/\2/;h;${s/\`\n(.*)/\1/mp};d' file
$cat ファイル 0 69 24 0 69 27 16 55 27 0 85 25 16 77 23 $sed -nr '/0\s/{H;${x;s/\`\n(.*)/\1/mp};d};/16\s/s/16\s(.* )/\1/;H;g;s/\`\n(.*)\n.*\n(.*)\'/\1 \2/p;g;s/\`\n(. *)(\n.*)\n(.*)\'/\2/;h;${s/\`\n(.*)/\1/mp};d' ファイル 0 69 24 55 27 0 69 27 77 23 0 85 25