맥락상 후속 조치는 다음과 같습니다.txt 파일에서 검색한 다음 새 txt 파일로 인쇄하세요.몇 가지 추가적인 합병증이 있습니다.
2개의 txt 파일이 있습니다. 첫 번째 파일은 data.txt 파일로, 2000줄이 넘는 줄이 포함되어 있으며 그 안에 있는 데이터는 다음과 같습니다.
alpha
hmld 573
otndgd 29
fidnt 1962
beta
jdkrshm 2
adny 14
urmekhjf 6893
...
두 번째 파일은 value.txt입니다.
value.txt의 값 목록 중 하나가 포함된 모든 줄을 검색하고 (새 txt 파일에서) 인쇄하고 싶습니다.
dn
hm
sf
, result1.txt와 동일(헤더는 "alpha"와 유사함):
fidnt 1962 alpha
adny 14 beta
result2.txt와 유사:
hmld 573 alpha
jdkrshm 2 beta
내 시스템: 우분투
감사합니다
답변1
다시 한 번 말씀드리지만, awk
여러분의 친구들은 여기 있습니다:
awk '
!values_processed {
result[$0] = "result"FNR".txt"; next
}
!NF {FNR=0; next}
FNR==1 {header=$0; next}
{
for (value in result)
if (index($0, value))
print $0, header > result[value]
}' values.txt values_processed=1 data.txt
에서와 동일한 방법을 사용하십시오.이전 질문에 대한 답변, 그러나 파일 라인의 값 목록을 라인 번호를 기반으로 각 값에 대한 출력 파일 이름을 기록하는 연관 배열로 가져오고 부분 문자열 검색을 수행하기 위해 values.txt
일치하는 대신 using을 사용하여 찾습니다 .values.txt
data.txt
index()
/regex/
답변2
내 생각에 당신이 원하는 것은 (테스트되지 않은) 것입니다.
awk '
NR==FNR {
out[$1] = "result" NR ".txt"
next
}
{
for ( i=2; i<=NF; i++ ) {
for ( str in out ) {
if ( index($i,str) ) {
print $i, $1 > out[str]
}
}
}
}
' values.txt RS='' FS='\n' data.txt
value.txt가 큰 경우 "열린 파일이 너무 많음" 임계값이 초과될 수 있습니다. 이것이 문제인 경우 알려주시기 바랍니다.