Скопируйте определенный столбец в другой файл

Лучше всего написать сценарий или использовать Ansible. Оба требуют ssh. См. документацию Ansible здесь и Простое руководство Ansible на tutorialspoint

1
06.02.2020, 11:13
3 ответа

Вероятно, не самый элегантный, если предположить, что файлы file1 и file2 находятся в вашем pwd...

#!/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
1
28.04.2021, 23:24

С pasteиawk:

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

С pasteиcut

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
1
28.04.2021, 23:24

Теги

Похожие вопросы