У меня есть текстовый документ, который содержит 2 строки информации. Строка 1 содержит имя файла, а строка 2 содержит идентификатор ссылки. Документ содержит дополнительные строки, кроме нужной информации, и я пытаюсь придумать незагромождающий способ собрать только ту информацию, которую я хочу. Использование 'cut -d' несколько раз кажется неаккуратным.
Вот пример моих данных
12:"content":"file;\r\n\tfilename=\"TestingFile.txt"}
13-"refid":"9B46BCAEDC9923"}]
Используя эту информацию, я хочу создать файл TestingFile.txt и записать значение refid в качестве содержимого - в основном значения между " " и ничего больше.
tfilename=\" и refid":" всегда будут предшествовать данным, которые я хочу захватить, и в строке всегда будет несколько символов после последнего ".
awk -F'"' 'NR==1 {fname=$(NF-1);} NR==2{print $(NF-1) >fname;}' file
awk
неявно циклы через каждую строку файла. Каждая строка разделена на поля.
-F'"'
Это делает функцию символа двойной кавычки как разделителя полей. При рассмотрении демонстрационного входа, который означает, что поля, которые мы хотим, будут предпоследним на каждой строке
NR==1 {fname=$(NF-1);}
, первая строка имеет имя файла. В awk
, NF
количество полей на строке. Так, $(NF-1)
ссылки предпоследнее поле. Его содержание сохраняется в переменную fname
.
NR==2{print $(NF-1) >fname;}
вторая строка имеет идентификатор как свое предпоследнее поле. Мы print
этот идентификатор в файл, названный fname
.
, Если вышеупомянутый код выполняется против демонстрационного входа, файл TestingFile.txt
создается в текущем каталоге:
$ cat TestingFile.txt
9B46BCAEDC9923
предположим, что входной файл похож:
12:"content":"file;\r\n\tfilename=\"TestingFile.txt","date":"2014-10-23"}
13-"refid":"9B46BCAEDC9923","author":"Anon"}]
, Так как наши данные больше не будут предпоследними полями, мы должны измениться эти awk
код:
awk -F'"' 'NR==1 {sub(/.*tfilename=\\"/, "");fname=$1;} NR==2 {sub(/.*refid":"/,"");print $1>fname;}' file2
Этот код удаляет все символы перед именем файла (строка 1) или идентификатор (строка 2). Как только это было сделано, информация, которую мы хотим, будет в поле 1. Код является иначе тем же.