Использовать find
-printf
управляйте для вывода обоих время (поддающимся сортировке способом) и файл, затем вид. Если Вы используете GNU, находят,
find . your-options -printf "%T+\t%p\n" | sort
Если Вы знаете, как сделать это в R, то любой ценой делают это в R. С классическими инструментами Unix это наиболее естественно сделано в awk.
awk '
FNR==1 && NR!=1 { while (/^<header>/) getline; }
1 {print}
' file*.txt >all.txt
Первая строка awk сценария соответствует первой строке файла (FNR==1
) кроме того, если это - также первая строка через все файлы (NR==1
). Когда эти условия соблюдают, выражение while (/^<header>/) getline;
выполняется, который заставляет awk продолжать читать другую строку (пропускающий текущую) как долго, поскольку текущий соответствует regexp ^<header>
. Вторая строка awk сценария печатает все за исключением строк, которые были ранее пропущены.
Попытайтесь делать это:
$ cat file1.txt; grep -v "^<header" file2.txt
<header>INFO=<ID=DP,Number=1,Type=Integer>
<header>INFO=<ID=DP4,Number=4,Type=Integer>
A
B
C
D
E
F
-v
отметьте означает инвертировать соответствие grep^
в REGEX, средства начаться строки:
array=( files*.txt )
{ cat ${array[@]:0:1}; grep -v "^<header" ${array[@]:1}; } > new_file.txt
Это - метод разрезания массива удара.
<header>
строки где угодно в файлах, не просто вначале. Это не может быть проблемой здесь, в зависимости от данных.
– Gilles 'SO- stop being evil'
08.01.2013, 20:39
grep '^<header>' file1.txt >output.txt && grep -v '^<header>' file*.txt >>output.txt
– Gilles 'SO- stop being evil'
08.01.2013, 20:41
So, чтобы сохранить двухстрочный заголовок первого файла, но не второго, в Bash:
Or, для многих файлов:
If a certain string is known to be present in all header lines but never in the rest of the input files, [115168]grep -v[115169] is a simpler approach, as sputnik показал.[114735]
Другое решение, похожее на « CAT + GREP
» сверху, с использованием хвоста
и голова
:
Написать заголовок первого файла в Выход:
Head -2 File1.txt> All.txt
- Глава -2
получает 2 первых строки файла.
Добавьте содержимое всех файлов:
Хвост -N +3 -Q файл * .txt >> all.txt
- -N +3
делает хвост
линий печати от 3 до конца,
-Q
говорит ему не печатать заголовок с именем файла (READ MAN
),
>>
добавляет к файлу, не перезаписывает его как >
.
И уверена, что вы можете поставить обе команды в одну строку:
head -2 file1.txt > all.txt; tail -n +3 -q file*.txt >> all.txt
или вместо ;
PUT &&
между ними для проверки успеха.
Короче (не обязательно быстрее) с SED
:
sed -e '3,${/^<header>/d' -e '}' file*.txt > all.txt
Это удалит все строки, начиная с
, начиная с линии 3, поэтому первый заголовок сохраняется, а другие заголовки удалены. Если есть другое количество строк в заголовке, соответствующим образом отрегулируйте команду (например, для 6-линейного заголовка 7
вместо 3
).
Если количество строк в заголовке неизвестно, вы можете попробовать это:
sed '1{
: again
n
/^<header>/b again
}
/^<header>/d
' file*.txt > all.txt
массив = (* .txt); заголовок -1 $ {массив [0]}> all.txt; tail -n +2 -q $ {array [@]: 0} >> all.txt
Предполагается, что вы используете папку с файлами .txt с тем же заголовком, которые необходимо объединить / объединить этот код объединит все текстовые файлы в all.txt с одним заголовком. первая строка (строки, разделенные точкой с запятой) собирает все текстовые файлы для объединения, вторые строки выводят заголовок из первого текстового файла в all.txt , а последняя строка объединяет все текстовые файлы, собранные без заголовок (начиная со строки 2 и далее) и добавляет его в all.txt .
grep
(как в ответе спутника). – Gilles 'SO- stop being evil' 08.01.2013, 20:39head -n 10 file1.txt >output.txt && tail -q -n +11 file*.txt >>output.txt
(если у Вас есть 10 строк заголовка). Кроме того, если Ваши файлы имеют числа на свои имена, остерегаются этогоfile9.txt
отсортирован междуfile89.txt
иfile90.txt
. Если Ваши файлы имеют числа какfile001.txt
, …,files009.txt
,files010.txt
, …, затемfiles*.txt
перечислит их в правильном порядке. – Gilles 'SO- stop being evil' 09.01.2013, 00:01awk 'FNR==1 && NR!=1{next;}{print}' *.csv
– Owen 16.03.2017, 17:28