awkを使用して特定の列からスペースを削除する方法

awkを使用して特定の列からスペースを削除する方法

2番目の列「名前」を修正し、名前間のスペースをすべて削除し、残りのtxtファイルは変更せずにそのままにして印刷したいと思います。

これは私の入力です(タブで区切られたフィールド)。

Roll NO Name         RandomColumn1    RandomColumn2 
1       Jason James  my value        my val 3

私が望む出力:

Roll NO Name        RandomColumn1  RandomColumn2 
1       JasonJames  my value        my val 3

私が成功せずに使用したコマンドは次のとおりです。

 awk '{$3=$4;  print }' | sed "s/^ *//"

答え1

awk 'BEGIN{ FS=OFS="\t" }{ gsub(" ", "", $2) }1' infile

FS は入力フィールドの区切り記号です。 OFS は出力フィールド区切り記号です。どちらも tabs に設定され、\t2 番目のフィールドのすべての空白文字を削除し、最終更新を印刷します。これ1使用される。

答え2

雇用GNU sed拡張正規表現モードでは、指示どおりに-E実行できます。 2番目のフィールドは、最初に\nパターンスペースに存在しないことが知られているトークン()で区切られます。次に、ループ内のこれらのマーカー間のスペースを選択し、ループの後ろのフィールド区切り記号に市場を復元します。

sed -Ee '
  s/\t/\n/;s//\n/;ta
  :a
    s/(\n.*) (.*\n)/\1\2/
  ta
  y/\n/\t/
' file

私達は利用できますPython 3目的の出力を取得するためのネストされたリストについて:

python3 -c 'import sys
ifs,ors,ifile = "\t", "\n",sys.argv[1]
spc,ofs = " ",ifs
with open(ifile) as f:
  print(*[ofs.join([f1,f2.replace(spc,""),f3_])    
for l in f for f1,f2,f3_ in [l.rstrip().split(ifs,2)]],sep=ors)
' file

perl -F'\t' -pale '
  substr($_,1+index($_,"\t$F[1]"),length($F[1])) =~ tr/ //d;
' file

答え3

注文する

awk 'NR>1{$2=$2$3;$3=" "}1' filename

出力

Roll NO Name         RandomColumn1    RandomColumn2 
1       JasonJames   my value          my val 3

関連情報