как добавить ноль, если два столбца не по длине?

Я нашел другой ответ на проблему. Лучше всего использовать команду find вместо команды ls . Это поможет найти самый старый файл и может использовать команду mv для перехода в другой каталог.

mv $(find /home/balaji/work/ -type f -printf '%T+ %p\n' | sort | head -1) /home/balaji/regular_archieve

find– Поиск файлов в иерархии каталогов.

/home/balaji/work/– Поиск местоположения.

/home/balaji/regular_archieve/– Местоположение цели.

type -f– поиск только в обычных файлах.

-printf ‘%T+ %p\n’— печатает дату и время последней модификации файла, разделенные символом +. (Напр. 2015 -07 -22+13 :42 :40.0000000000 ). Здесь %p указывает имя файла. \n указывает на новую строку.

sort | head -n 1— Команда sort сортирует выходные данные и отправляет выходные данные команде head для отображения самого старого файла. Здесь -n 1 указывает только один файл, т.е. самый старый файл.

2
19.11.2019, 14:51
5 ответов

Сawk:

awk 'NF < 2 {$2 = 0}; 1' < file

Устанавливает для второго поля значение 0, если количество полей(NF)меньше 2 в данной записи.

Обратите внимание, что для строк без полей (пустых строк )это даст " 0". Вместо этого вы можете сделать:

awk 'NF < 1 {$1 = 0}; NF < 2 {$2 = 0}; 1' < file

Чтобы эти строки стали "0 0"или:

awk 'NF && NF < 2 {$2 = 0}; 1' < file

, чтобы оставить эти пустые строки в покое.

3
27.01.2020, 22:02

Вы можете использовать awkдля этой цели:

awk '{if (NF == 2) print $1 " " $2; else if (NF == 1) print $1 " 0";}' input_file.txt > output_file.txt

Это будет читать строку файла -мудро, и для всех тех строк, которые имеют два «поля» (, т.е. разделенные пробелом -группы текста ), выводить эти два, но для всех строк, которые есть только одно поле, напечатайте его и «0» с разделяющим пробелом между ними.

Обратите внимание, что корректировка текста здесь не выполняется, и я предположил, что файл содержит только строки с одним или двумя номерами, поэтому здесь не выполняются никакие проверки (, хотя включить их было бы несложно ). Любые строки, в которых нет ни одного, ни двух полей, будут проигнорированы в выводе.

0
27.01.2020, 22:02

Попробуйте это,

awk -v OFS=" " '{if ($2=="") print $0,0; else print $0}' file
1 2  
3 4   
4 5  
7 0
8 0
8 0
1
27.01.2020, 22:02

Если все строки имеют первое поле и содержимое строки числовое, используйте:

awk '{$2+=0}1'./file

Это оценит поле номер 2 как число с плавающей запятой и потенциально изменит его. Не проблема для большинства целых чисел.

Если вам нужно проверить наличие пустых строк (и избежать их изменения ), используйте:

awk 'NF>0 {$2+=0} 1'./file

Это проверяет наличие первого поля (NF>0), изменяет второе поле($2+=0)только в случае необходимости, а затем печатает все строки(1).

0
27.01.2020, 22:02
 awk 'NF <2 {$0=$0" " "0"}1' filename
-1
27.01.2020, 22:02

Теги

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