$cat input 3 4 5 1 3 6
아래처럼 총 n번째 줄(가령 n=5), 특정문자(가령 Y)로 채우고 싶습니다. 물론 파일을 열지 않고(몇 행까지 숫자가 있는지 모르는 상태에서), 실행하고 싶습니다. 쉘에서 해결할 수 있을까요? 감사합니다.
$cat output 3 4 5 1 3 6 Y Y Y Y Y Y Y Y Y
awk를 쓰세요
N=5 C="YYY" awk 'BEGIN {L=0} {print $0; L++} END{ for(;L<ENVIRON["N"];L++) { print ENVIRON["C"] } }' input > output
---http://coolengineer.com
$ cat b.sh #!/bin/bash file=$1 n=$2 c=$3 line=$(cat $file | wc -l) column=$(head -n1 $file | wc -w) test $line -ge $n && exit output="$(cat $file)\n" for((i=line; i for((j=1; j<=column; j++)); do output="$output$c" test $j -ne $column && output="$output " || output="$output\n" done done echo -e "$output" | column -t
$ sh b.sh a 4 x
$ sh b.sh a 7 x 1 2 3 4 5 6 7 8 9 10 11 12 x x x x x x x x x
$ cat a 1 2 3 4 5 6 7 8 9 10 11 12
for((i=line; i for((j=1; j<=column; j++)); do 가 아닉고
for((i=line; i for((j=1; j<=column; j++)); do 입니다.
감사합니다 ^^
$ n=5 $ cat input && yes $(head -1 input | sed -r 's/[^[:space:]]+/Y/g') | head -$(($n - $(wc -l < input))) 3 4 5 1 3 6 Y Y Y Y Y Y Y Y Y
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
$ filename=input; n=5; c=Y; echo -e "$(cat a && test $n -gt $(cat $filename | wc -l) && yes $(head -1 $filename | sed "s/[^[:space:]]\+/$c/g") | head -$(($n - $(wc -l < $filename))))" | column -t -o ' '
sed문에서 *가 아니라 \+로 해야겠지요.
옙.. 공백 문자가 2개 이상 들어가 있다면 문제가 생길테니.. * 보다는 \+ 를 쓰는게 좀 더 정확하죠..
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
awk를 쓰세요N=5 C="YYY" awk
awk를 쓰세요
---
http://coolengineer.com
한번 작성해 봤어요.
$ cat b.sh
#!/bin/bash
file=$1
n=$2
c=$3
line=$(cat $file | wc -l)
column=$(head -n1 $file | wc -w)
test $line -ge $n && exit
output="$(cat $file)\n"
for((i=line; i for((j=1; j<=column; j++)); do
output="$output$c"
test $j -ne $column && output="$output " || output="$output\n"
done
done
echo -e "$output" | column -t
$ sh b.sh a 4 x
$ sh b.sh a 7 x
1 2 3
4 5 6
7 8 9
10 11 12
x x x
x x x
x x x
a는 파일 이름이예요.
$ cat a
1 2 3
4 5 6
7 8 9
10 11 12
깨졌어요.
for((i=line; i for((j=1; j<=column; j++)); do
가 아닉고
for((i=line; i for((j=1; j<=column; j++)); do
입니다.
감사합니다 ^^
감사합니다 ^^
음 ..
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
위 코드중에서 잘못된 부분이 있는 것 같아서요.
$ filename=input; n=5; c=Y; echo -e "$(cat a && test $n -gt $(cat $filename | wc -l) && yes $(head -1 $filename | sed "s/[^[:space:]]\+/$c/g") | head -$(($n - $(wc -l < $filename))))" | column -t -o ' '
sed문에서 *가 아니라 \+로 해야겠지요.
음 ..
옙.. 공백 문자가 2개 이상 들어가 있다면 문제가 생길테니..
* 보다는 \+ 를 쓰는게 좀 더 정확하죠..
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기