Я не уверен, почему вы получаете результаты, которые вы показываете в своей третьей строке awk, и я не совсем уверен, что вы хотите в качестве последнего поля, которое вы добавляете, потому что ваши "ожидаемые результаты" недействительно соответствует коду, который вы предоставили.Если ваша цель состоит в том, чтобы добавить слово «тег» в качестве последнего поля в каждой строке, то может сработать следующее:
awk -F, '{$(NF+1)="tag"} 1' OFS=, TEST1/a.csv
Это имеет следующие биты:
-F,
устанавливает разделитель полей на запятую, совместимую с вашим CSV. $(NR+1)
добавляет новое поле в конец каждой записи. 1
- это сокращение от "«Печать текущей записи». OFS=,
устанавливает разделитель выходного поля на запятую.
Существует несколько способов построения одной и той же логики, и все они обеспечат примерноте же результаты.
Устанавливает разделители полей ввода и вывода в блоке BEGIN и использует добавление поля в качестве условия, которое печатает строку.
awk 'BEGIN{FS=OFS=","} $(NF+1)="tag"' TEST1/a.csv
Это обходится безидея записей и просто добавляет текст в каждую строку.
awk '{$0=$0 ",tag"} 1' TEST1/a.csv
и т. д.
В общем, если вы имеете дело с вводом в полях, я рекомендую использовать awk таким образом, чтобы пониматьэти поля, на случай, если вам понадобится манипулировать полемдс вместо потока в будущем.Если вам нужен потоковый редактор, вы можете использовать sed
.
sed 's/$/,tag/' TEST1/a.csv
IF , с другой стороны, вы хотите добавить имя файла вконец каждой строки и только текст tag
в заголовке, вы можете сделать что-то вроде этого:
awk 'NR==1 {$(NF+1)="tag"} NR>1 {$(NF+1)=FILENAME} 1' FS=, OFS=, TEST1/a.csv
Это сгенерирует результаты, которые вы показали, с именем файла в финалеполе.Конечно, вы можете делать все виды изменений в зависимости от формы ваших данных.Если вы имеете дело с несколькими файлами, каждый из которых имеет заголовок в первой строке, вам может потребоваться следующее:
awk 'NR==1 {$(NF+1)="tag";print} FNR==1 {next} NR>1 {$(NF+1)=FILENAME} 1' FS=, OFS=, file1.csv file2.csv ...
Разница в том, что заголовок изменяется в первой строке и печатаетсяи затем последующие первые строки файлов полностью пропускаются.