Як переплутати рядки двох або більше файлів?


10

Я спробував отримати два файли в одному файлі. Я спробував нижче команду:

cat file1 file2

але тут file2дані додаються file1.

Мені потрібно file11-й рядок file2, file1другий рядок і file2другий рядок і т.д.

Хтось може сказати мені, як це зробити простим способом?

Відповіді:


17

Для цього є додаток!

$ cat file1
file1 line1
file1 line2

$ cat file2
file2 line1
file2 line2

Тепер, якщо ви передаєте ці файли як аргументи paste:

$ paste -d' ' file1 file2
file1 line1 file2 line1
file1 line2 file2 line2

Якщо "file1 1-й рядок, після якого file2 перший рядок, та file1 другий рядок, за яким file2 другий рядок тощо", ви маєте на увазі, що вам потрібно новий рядок між кожним вставленим рядком, просто відрегулюйте параметр -d(роздільник).

$ paste -d'\n' file1 file2
file1 line1
file2 line1
file1 line2
file2 line2

2

POSIX Awk; це працює з довільною кількістю файлів, і файли навіть не повинні мати однакову кількість рядків. Сценарій продовжує працювати, поки всі файли не виходять з рядків:

BEGIN {
  do {
    br = ch = 0
    while (++ch < ARGC)
      if (getline < ARGV[ch]) {
        printf ch < ARGC - 1 ? $0 FS : $0 RS
        br = 1
      }
  } while (br)
}

Є одна проблема з цим, якщо вхід містить символи '%', він намагався зрівняти їх всередині printf. Моє оновлення буде (я не впевнений, що це цілком правильно):printf "%s", ((ch < ARGC - 1) ? $0 FS : $0 RS)
Scala William

0

Швидкий баш-розчин

# Takes as many file arguments as needed
function InterleaveFiles {

    local counter=0
    local hasLine=true

    while [ $hasLine == true ]; do
            hasLine=false
            for i in "$@"; do
                    line=$(awk 'NR == num_line {print; exit}' num_line=$((counter+1)) "$i")
                    if [ -n "$line" ]; then
                            echo "$line"
                    hasLine=true
                    fi
            done
            counter=$((counter+1))
    done
}

InterleaveFiles file1 file2 file3 file4


-2
paste -d '\n' file1 file2 > file3

де file1і file2є вхідні файли, і file3буде створений вихід.


1
Ласкаво просимо на біржу стеків U&L! Ця відповідь майже ідентична відповіді тердона . У тих випадках, коли ви думаєте, що ви можете покращити відповідь, але не надаєте принципово нової інформації, будь ласка, рекомендуйте запропонувати редагувати існуючу відповідь . Відповіді також упорядковуються на основі голосування, тому кожна відповідь повинна стояти самостійно або посилатися на іншу відповідь. Ось чому снаряди оболонки повинні супроводжуватися описом, що пояснює їх роботу.
Thomas Nyman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.