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

Мне нужно, чтобы 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)}' 
  • Автоматизировать процедуру ввода двоичного файла
  • Добавить расширение ко всем файлам в каталоге, содержащем точную строку
  • удалить все экземпляры _000 из нескольких файлов
  • Как создать zip-каталогов -mtime -150
  • Составить имя файла внутри сценария ожидания
  • Расширения файлов для сценариев unix shell
  • Поиск изменений в общем объекте через bash
  • Измените файл без создания другого файла
  • Вывод переменной скрипта Bash
  • как установить ряд дисков в bash?
  • Как я могу объединить несколько строк с пробелами (пустая строка), разделяющими их?
  • Выполнить скрипт автоматически при выключении Fedora 15/16
  • Linux и Unix - лучшая ОС в мире.