Присоединение к каждой строке файла с подчеркиванием

Используйте awk . awk использует ассоциативные массивы; вы можете построить массив с числами из select.dat в качестве ключей и не беспокоиться о назначении каких-либо значений. Затем вы можете использовать простую проверку «___ in » в качестве фильтра, чтобы определить, что печатать.

NR означает «номер записи», а FNR означает «номер записи файла». Тест FNR == NR по существу означает: «Я все еще работаю над первым файлом?» Таким образом, следующий код создаст массив (без значений), используя строки из первого заданного файла в качестве ключей. Затем он печатает только те строки из второго файла, где второе поле находится в созданном массиве.

awk 'FNR == NR {myarray[$0]; next} $2 in myarray { print }' select.dat file.dat
0
01.08.2018, 23:26
5 ответов

Использованиеawk:

awk '{OFS="_";}{$1=$1; print}' test.txt

Использование петли:

while read -r line; do 
  line=${line// /_} 
  command using "$line"
done<test.txt
4
28.01.2020, 02:13

Кто-то дал ответ с tr , а кто-то еще дал ответ с awk , теперь вот как это сделать с sed:

for i in "`cat test.txt`"
do
    fn="$(echo "$i" |sed -e 's/ /_/g')"
    'do something else' > $fn.txt
done
-1
28.01.2020, 02:13

Используйте trдля транслитерации пробела в подчеркивание:

while read line
do
    echo ${line} | tr -s " " "_"
done < test.txt

Человек _разумный Mus _мускулистый Крыса _крыса _крыса

5
28.01.2020, 02:13

Я бы использовал sedи прочитал его вывод с помощью цикла:

sed 's/[[:space:]]\+/_/g' test.txt | while IFS= read -r line; do 
    process "$line" however
done > some.output.file
2
28.01.2020, 02:13

Вот краткий цикл for, в котором используется sed:

for file in $(sed "s/ /_/g" test.txt); do echo "test" > $file; done

Просто замените команду echo на то, что вы хотите сделать.

Я использую такие команды постоянно, хоть и днем.

0
28.01.2020, 02:13

Теги

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