다음 구성 파일(실시예 1)가 예상대로 구성되지 않았습니다.
파일의 각 줄에는 에 설명된 대로 /grid/sdX
( a
to z
) 가 포함되어야 합니다.실시예 2.
이 작업을 위해 bash 스크립트를 작성하는 방법을 찾아야 합니다. /grid/sdX
줄 끝에 누락된 내용을 추가하는 방법은 무엇입니까 ?
실시예 1
more dfs_data_dir_mount.hist
/grid/sdk/hadoop/hdfs/data,/
/grid/sdi/hadoop/hdfs/data,/
/grid/sdh/hadoop/hdfs/data,/
/grid/sdc/hadoop/hdfs/data,/grid/sdc
/grid/sdj/hadoop/hdfs/data,/
/grid/sde/hadoop/hdfs/data,/grid/sde
/grid/sdd/hadoop/hdfs/data,/grid/sdd
/grid/sdb/hadoop/hdfs/data,/grid/sdb
/grid/sdf/hadoop/hdfs/data,/grid/sdf
/grid/sdg/hadoop/hdfs/data,/
예상 결과(예 2)
/grid/sdk/hadoop/hdfs/data,/grid/sdk
/grid/sdi/hadoop/hdfs/data,/grid/sdi
/grid/sdh/hadoop/hdfs/data,/grid/sdh
/grid/sdc/hadoop/hdfs/data,/grid/sdc
/grid/sdj/hadoop/hdfs/data,/grid/sdj
/grid/sde/hadoop/hdfs/data,/grid/sde
/grid/sdd/hadoop/hdfs/data,/grid/sdd
/grid/sdb/hadoop/hdfs/data,/grid/sdb
/grid/sdf/hadoop/hdfs/data,/grid/sdf
/grid/sdg/hadoop/hdfs/data,/grid/sdg
답변1
sed
해결책:
sed -Ei 's~^(/[^/]+/[^/]+)(.*,)/$~\1\2\1~' dfs_data_dir_mount.hist
~
-sed
하위 명령 구분 기호 로 처리됩니다.[^/]+
- 슬래시를 제외한 하나 이상의 문자와 일치합니다./
^
$
- 각각 선의 시작점과 끝점입니다.
답변2
다음 awk 명령을 사용하여 이 작업을 수행할 수 있습니다.
awk -F'/' '{OFS="/";}{print $1,$2,$3,$4,$5,$6,"grid",$3}' input
awk
-F'/'
- 별도 입력/
{OFS="/";}
- 별도 출력/
{print $1,$2,$3,$4,$5,$6,"grid",$3}'
- 인쇄/grid/sd*/hadoop/hdfs/data,/
(입력에서 가져온 필드) 및grid/sd*
(grid
필드 3을 수동으로 입력하고 다시 추가)
답변3
awk
:
awk -F/ -v OFS='/' '!$NF {$0=$0 $2 OFS $3}; 1'
-F/ -v OFS='/'
입력 및 출력 필드 구분 기호를 다음으로 설정합니다./
!$NF {$0=$0 $2 OFS $3}; 1
마지막 필드가 비어 있으면 필요한 형식으로 레코드를 다시 작성합니다.1
원본이어야awk
하며 인쇄된 기록이어야 합니다.
예:
% cat file.txt
/grid/sdk/hadoop/hdfs/data,/
/grid/sdi/hadoop/hdfs/data,/
/grid/sdh/hadoop/hdfs/data,/
/grid/sdc/hadoop/hdfs/data,/grid/sdc
/grid/sdj/hadoop/hdfs/data,/
/grid/sde/hadoop/hdfs/data,/grid/sde
/grid/sdd/hadoop/hdfs/data,/grid/sdd
/grid/sdb/hadoop/hdfs/data,/grid/sdb
/grid/sdf/hadoop/hdfs/data,/grid/sdf
/grid/sdg/hadoop/hdfs/data,/
% awk -F/ -v OFS='/' '!$NF {$0=$0 $2 OFS $3}; 1' file.txt
/grid/sdk/hadoop/hdfs/data,/grid/sdk
/grid/sdi/hadoop/hdfs/data,/grid/sdi
/grid/sdh/hadoop/hdfs/data,/grid/sdh
/grid/sdc/hadoop/hdfs/data,/grid/sdc
/grid/sdj/hadoop/hdfs/data,/grid/sdj
/grid/sde/hadoop/hdfs/data,/grid/sde
/grid/sdd/hadoop/hdfs/data,/grid/sdd
/grid/sdb/hadoop/hdfs/data,/grid/sdb
/grid/sdf/hadoop/hdfs/data,/grid/sdf
/grid/sdg/hadoop/hdfs/data,/grid/sdg
답변4
문자열 연결 연산자를 사용하는 대체(필드 기반) Perl 접근 방식 .=
:
perl -F/ -lpe '$_ .= "$F[1]/$F[2]" unless defined $F[7]' dfs_data_dir_mount.hist