2013-08-15 4 views
2

У меня есть файл с именем abc.csv, который содержит следующие 6 строк:Замена линии с двумя новыми линиями

xxx,one 
yyy,two 
zzz,all 
aaa,one 
bbb,two 
ccc,all 

Теперь, когда all приходит в линии, что линия должна быть заменена как one и two, то есть:

xxx,one 
yyy,two 
zzz,one 
zzz,two 
aaa,one 
bbb,two 
ccc,one 
ccc,two 

Может кто-нибудь помочь, как это сделать?

+0

в то время как линия чтения делать эха $ линии , если [ "' Эхо $ линии | AWK -F '{печати $ 2}' '" = "все"] затем эхо «' Эхо $ линии | AWK - F, '{print $ 1} ', one" echo "' echo $ line | awk -F,' {print $ 1} ', two" fi сделано user2686786

ответ

1
$ awk -F, -v OFS=, '/all/ { print $1, "one"; print $1, "two"; next }1' foo.input 
xxx,one 
yyy,two 
zzz,one 
zzz,two 
aaa,one 
bbb,two 
ccc,one 
ccc,two 

Если вы хотите придерживаться раковины только решения:

while read line; do 
    if [[ "${line}" = *all* ]]; then 
     echo "${line%,*},one" 
     echo "${line%,*},two" 
    else 
     echo "${line}" 
    fi 
done < foo.input 
+0

Привет, Адриан. Извините .. нет строки «строка 1, строка 2, строка 3 и все» в файле. Она начинается непосредственно с xxx, одна .. вторая строка будет yyy, two .. just для объяснения я написал строку 1, строку 2 и т. д. – user2686786

+0

@ user2686786 А, это имеет смысл ... Я изменил свой ответ соответственно. Это то, что вы искали? –

+0

да точно – user2686786

0

В sed:

sed '/,all$/{ s/,all$/,one/p; s/,one$/,two/; }' 

Когда линия соответствует ,all в конце первой замены all с one и распечатать его; затем замените one на two и дайте автору печати выполнить печать.

Смежные вопросы