复制另一个文件中的特定列

复制另一个文件中的特定列

我想在已经存在的两列之间复制文件file1 (.txt)中的第二列。.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,我要复制的列是第二个

在此输入图像描述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

相关内容