Уменьшить длину определенного столбца в текстовом файле с разделителями

Мне нужно, чтобы 5-й столбец в текстовом файле с разделителями сокращался до первых 5 символов. Все остальные столбцы должны оставаться неотредактированными.

Входные данные:

file1.txt column1 column2 column3 column4 column5 123456789 123456789 123456789 123456789 123456789 

Я хотел бы, чтобы результат выглядел так:

 output.txt column1 column2 column3 column4 column5 123456789 123456789 123456789 123456789 12345 

Примечание. Я использую запятые в качестве разделителя.

3 Solutions collect form web for “Уменьшить длину определенного столбца в текстовом файле с разделителями”

Если file.csv выглядит так:
123456789,123456789,123456789,123456789,123456789 123456789,123456789,123456789,123456789,223456789 123456789,123456789,123456789,123456789,323456789 123456789,123456789,123456789,123456789,423456789

awk -F, '{print $1","$2","$3","$4","substr($5,1,5) }' file.csv
выведет это:
123456789,123456789,123456789,123456789,12345 123456789,123456789,123456789,123456789,22345 123456789,123456789,123456789,123456789,32345 123456789,123456789,123456789,123456789,42345

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

 123456789,123456789,123456789,123456789,123456789 

и если в строке всегда есть 5 таких значений, вы можете использовать sed :

 sed '2,$s/\(.*\),\(.*\),\(.*\),\(.*\),\(.....\)\(.*\)/\1,\2,\3,\4,\5/' input 

2,$ предполагает, что вы также разделяете запятую (и чтобы ее пятый столбец не был усечен), если это не так, оставьте это.

Или awk :

Для белого пробела:

 awk 'NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}' 

Для запятой:

 awk 'BEGIN {FS=","} NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}' 

Для немного лучшего разделения CSV и предположения GNU awk:

 awk -vFPAT='[^,]*|"[^"]*"' 'NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}' 
  • Слияние двух файлов с помощью скриптов
  • Составить имя файла внутри сценария ожидания
  • Sudo в качестве другого пользователя, чтобы сохранить свой домашний каталог в txt-файле
  • Прерывание цикла Bash для цикла
  • Как передать имя функции тестируемому?
  • Как вызвать ошибку 77 EBADFD в Linux
  • Как обнаружить зависание настольного приложения
  • «Interact» работает не так, как ожидалось, в сценариях bash / expect
  • Добавить одноразовую запланированную задачу через сценарий оболочки?
  • Как / Можно ли установить python переносимым способом?
  • Извлечение символов после определенного текста
  • Linux и Unix - лучшая ОС в мире.