他のファイルの特定の列のコピー

他のファイルの特定の列のコピー

すでに存在する2つの列の間にファイルfile1 (.txt)の2番目の列をコピーしたいと思います。.csv(file2)

前任者。ファイル1(.txt)

aaaaa   AA
bbbbb   A
ccccc   AB

ファイル2(.csv)

vnght   234    ghy
thryu   567    guuu
ghru    456    guuu

出力(.csv)

vnght   234    AA    ghy
thryu   567    A     guuu
ghru    456    AB    guuu

どうすればいいですか?


ここに画像の説明を入力してください。

ファイル1、列2をコピーしたい..

ここに画像の説明を入力してください。

これはfile1で、コピーしたい列は2番目の列です。

ここに画像の説明を入力してください。r.com/XZaxL.png

3列と4列の間の列をコピーしたいファイル。

ここに画像の説明を入力してください。 わかりません。結果がそうですね。

答え1

そしてpastecut

paste -d, <(cut -d',' -f 1,2 file2.csv) \
          <(cut -d$'\t' -f2 file1.txt) \
          <(cut -d',' -f 3 file2.csv)

テスト

$ cat file1.txt
aaaaa   AA
bbbbb   A
ccccc   AB

$ cat file2.csv
vnght,234,ghy
thryu,567,guuu
ghru,456,guuu

$ paste -d, <(cut -d',' -f 1,2 file2.csv) \
            <(cut -d$'\t' -f2 file1.txt) \
            <(cut -d',' -f 3 file2.csv)
vnght,234,AA,ghy
thryu,567,A,guuu
ghru,456,AB,guuu

file2.csvの右側に追加の列があり、目標がこれらの列を維持することである場合は、スクリプトを次のように調整する必要があります。

$ paste -d, <(cut -d',' -f1,2 file2.csv) \
            <(cut -d$'\t' -f2 file1.txt) \
            <(cut -d',' -f3- file2.csv)
vnght,234,AA,ghy
thryu,567,A,guuu
ghru,456,AB,guuu

答え2

file1とfile2があなたのパスワードにあると仮定すると、おそらく最もエレガントではありません...

#!/bin/bash
i=1
while read -r line
do
  FIELD2=$(echo "$line" | awk '{print $2}')
  LINEFROMFILE2=$(sed "${i}q;d" ./file2)
  echo "$LINEFROMFILE2" | awk -v field="$FIELD2" '{$3=$3" "field} {print $0}'
  ((i++))
done < file1

答え3

そして:pasteawk

paste <(awk '{print $1"\t"$2}' file2)\
      <(awk '{print $2}' file1)\
      <(awk '{print $3}' file2)\
      > output

関連情報