タブ区切り文字を保持しながらtsvファイルの列を置き換える方法は? [コピー]

タブ区切り文字を保持しながらtsvファイルの列を置き換える方法は? [コピー]

たとえば、次のようになります。

名前1 2 3 4 5 6 7 8

タブ区切り記号を使用^

2つの列(たとえば、0から始まる場合は7列と8列)を切り替えたいので、次のようにします。

名前1 2 3 4 5 6 8 7

最終的には別の列インデックスにする必要があります。

awkを使ってみましたが、エラーがたくさん発生しました。説明してもらえますか?

私が試したコマンドは次のとおりです。

awk ' { t = $10; $10 = $9; $9 = t; print > "test2.txt"; } ' test.txt 

新しいファイルを作成しますが、タブ区切り文字はありません。 (スペース区切り記号を含む)

ベストアンサー1

私はこれをawkする方法がわからないので、ここに単純なbashスクリプトがあります。

#!/usr/bin/env bash

while IFS='' read -r i || [[ -n "$i" ]]; do
  cut -f1,2,3 -z <<<"$i"
  printf '\t'
  cut -f10 -z <<<"$i"
  printf '\t'
  cut -f5,6,7,8,9 -z <<<"$i"
  printf '\t'
  cut -f4 <<<"$i"
done <colinput.txt

"-z"切り取りオプションは改行文字を印刷しません。-f1,2,3,4,5,6,8,7切断しても出力の列位置は変わらないため、可能なオプションはありません。切り取りのデフォルトの区切り記号はタブです。

おすすめ記事