Крис ответил правильно, но, как вы спросили «в чем проблема с кодом» в вашем комментарии, проблема с вашим кодом состоит в том, что cat
обычно ожидает имена файлов в качестве аргументов, и результат выполнения cat file1 file2 ...
будет полное содержимое всех файлов, выгружаемых на ваш экран или в любые конечные конвейеры.
Если вы используете функцию отладки оболочки, set -vx
перед циклом, вы увидите, как ваша $ LINE передается в виде списка файлов в cat и, конечно, вы можете увидеть это по полученным сообщениям
cat: chr1: No such file or directory
cat: 3392391: No such file or directory
....
Чтобы исправить ваш код, замените cat $LINE
на echo "$LINE"
, чтобы оставить пробелы / табуляции как есть в выводе файла ИЛИ echo $LINE
и получить один пробел между каждым словом в LINE.
Вы решили напечатать каждую строку, увеличив $c
, поскольку head
из вашего файла супер неэффективно. Вы должны прочитать файл полностью для каждой строки данных. Хотя для небольших файлов это будет работать нормально, если вы примените эту технику к файлу с тысячами строк, ваше время выполнения будет расти в геометрической прогрессии (извините, не точный прогноз) вместо того, чтобы обрабатывать файл менее чем за 1 секунду, занимает 100 или 1000 секунд.
(Хороший вопрос, я ценю пример данных. Это также помогло бы включить хотя бы одну или две строки ожидаемого результата.)
Надеюсь, это поможет.