AWK ਕਮਾਂਡਜ਼ ਅਤੇ ਸਕਰਿਪਟ ਕਿਵੇਂ ਲਿਖੀਏ

ਕਮਾਂਡਾਂ, ਸੰਟੈਕਸ, ਅਤੇ ਉਦਾਹਰਨਾਂ

Awk ਕਮਾਂਡ ਟੈਕਸਟ ਫਾਈਲਾਂ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਜਾਂ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨ ਦਾ ਇੱਕ ਸ਼ਕਤੀਸ਼ਾਲੀ ਤਰੀਕਾ ਹੈ-ਖਾਸ ਤੌਰ ਤੇ, ਡੇਟਾ ਫਾਈਲਾਂ ਜੋ ਲਾਈਨਾਂ (ਰੋਅ) ਅਤੇ ਕਾਲਮਾਂ ਦੁਆਰਾ ਸੰਗਠਿਤ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ.

ਸਧਾਰਨ awk ਕਮਾਂਡਾਂ ਕਮਾਂਡ ਲਾਈਨ ਤੋਂ ਚਲੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ. ਹੋਰ ਜਟਿਲ ਕੰਮਾਂ ਨੂੰ ਇੱਕ ਫਾਇਲ ਵਿੱਚ awk ਪ੍ਰੋਗਰਾਮਾਂ (ਇਸਦੇ ਅਖੌਤੀ ਏ.ਜੀ.ਕੇ. ਸਕ੍ਰਿਪਟਾਂ) ਦੇ ਤੌਰ ਤੇ ਲਿਖਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ.

ਇੱਕ awk ਕਮਾਂਡ ਦਾ ਮੂਲ ਫਾਰਮੈਟ ਇਸ ਤਰਾਂ ਦਿੱਸਦਾ ਹੈ:

awk 'pattern {action}' input-file> ਆਉਟਪੁਟ-ਫਾਈਲ

ਇਸਦਾ ਮਤਲਬ ਹੈ: ਇਨਪੁਟ ਫਾਈਲ ਦੇ ਹਰੇਕ ਲਾਈਨ ਨੂੰ ਲੈ ਜਾਓ; ਜੇਕਰ ਲਾਈਨ ਵਿੱਚ ਪੈਟਰਨ ਸਤਰ ਨੂੰ ਕਿਰਿਆ ਲਾਗੂ ਕਰਦੇ ਹਨ ਅਤੇ ਨਤੀਜਾ ਵਾਲੀ ਲਾਈਨ ਆਉਟਪੁੱਟ-ਫਾਇਲ ਵਿੱਚ ਲਿਖਦੇ ਹਨ. ਜੇ ਪੈਟਰਨ ਨੂੰ ਛੱਡ ਦਿੱਤਾ ਗਿਆ ਹੈ, ਤਾਂ ਕਿਰਿਆ ਸਾਰੀ ਲਾਈਨ 'ਤੇ ਲਾਗੂ ਹੁੰਦੀ ਹੈ. ਉਦਾਹਰਣ ਲਈ:

awk '{print $ 5}' table1.txt> output1.txt

ਇਹ ਕਥਨ ਹਰੇਕ ਲਾਈਨ ਦੇ 5 ਵੇਂ ਕਾਲਮ ਦਾ ਤੱਤ ਲੈਂਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਆਉਟਪੁੱਟ ਫਾਇਲ "output.txt" ਵਿੱਚ ਇੱਕ ਲਾਈਨ ਦੇ ਰੂਪ ਵਿੱਚ ਲਿਖਦਾ ਹੈ. '$ 4' ਵੇਰੀਏਬਲ ਦੂਜੀ ਕਾਲਮ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ. ਇਸੇ ਤਰ੍ਹਾਂ, ਤੁਸੀਂ $ 1, $ 2, $ 3, ਆਦਿ ਦੇ ਨਾਲ ਪਹਿਲੀ, ਦੂਜੀ ਅਤੇ ਤੀਜੀ ਕਾਲਮ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕਦੇ ਹੋ. ਡਿਫਾਲਟ ਕਾਲਮਾਂ ਅਨੁਸਾਰ ਸਪੇਸ ਜਾਂ ਟੈਬ (ਇਸ ਨੂੰ ਸਫੈਦ ਸਪੇਸ ਕਿਹਾ ਜਾਂਦਾ ਹੈ) ਦੁਆਰਾ ਵੱਖ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ. ਇਸ ਲਈ, ਜੇ ਇੰਪੁੱਟ ਫਾਇਲ "table1.txt" ਵਿੱਚ ਇਹ ਸਤਰਾਂ ਹਨ:

1, ਜਸਟਿਨ ਟਿੰਬਰਲੇਕ, ਟਾਈਟਲ 545, ਕੀਮਤ $ 7.30 2, ਟੇਲਰ ਸਵਿਫਟ, ਟਾਈਟਲ 723, ਕੀਮਤ 7 ਡਾਲਰ 7.90 3, ਮਿਕ ਜਗਰ, ਟਾਈਟਲ 610, ਕੀਮਤ $ 7.90 4, ਲੇਡੀ ਗਾਗਾ, ਟਾਈਟਲ 118, ਕੀਮਤ 7.30 ਡਾਲਰ, ਜੋਨੀ ਕੈਸ਼, ਟਾਈਟਲ 482, ਕੀਮਤ $ 6.50 6, ਏਲਵਸ ਪ੍ਰੈਸਲੇ, ਟਾਈਟਲ 335, ਕੀਮਤ $ 7.30 7, ਜੌਹਨ ਲੈਨਨ, ਟਾਈਟਲ 271, ਕੀਮਤ $ 7.90 8, ਮਾਈਕਲ ਜੈਕਸਨ, ਟਾਈਟਲ 373, ਕੀਮਤ $ 5.50

ਫਿਰ ਕਮਾਂਡ ਆਉਟਪੁਟ ਫਾਇਲ "output1.txt" ਵਿੱਚ ਹੇਠ ਲਿਖੀਆਂ ਲਾਈਨਾਂ ਲਿਖ ਲਵੇਗੀ:

545, 723, 610, 118, 482, 335, 271, 373,

ਜੇ ਕਾਲਮ ਵਿਭਾਜਨ ਸਪੇਸ ਜਾਂ ਟੈਬਸ ਤੋਂ ਇਲਾਵਾ ਕੁਝ ਹੋਰ ਹੈ, ਜਿਵੇਂ ਕਿ ਕਾਮੇ, ਤੁਸੀਂ ਇਸ ਨੂੰ ਅਵਾਜ ਸਟੇਟਮੈਂਟ ਵਿੱਚ ਹੇਠ ਦਿੱਤੇ ਅਨੁਸਾਰ ਦੇ ਸਕਦੇ ਹੋ:

awk -F, '{print $ 3}' ਟੇਬਲ 1.txt> output1.txt

ਇਹ ਹਰੇਕ ਲਾਈਨ ਦੇ ਕਾਲਮ 3 ਤੋਂ ਤੱਤ ਚੁਣਦਾ ਹੈ ਜੇਕਰ ਕਾਲਮਾਂ ਨੂੰ ਕਾਮੇ ਦੁਆਰਾ ਵੱਖ ਕੀਤਾ ਜਾਦਾ ਹੈ. ਇਸ ਲਈ ਆਊਟਪੁਟ, ਇਸ ਕੇਸ ਵਿੱਚ ਹੋਵੇਗਾ:

ਟਾਈਟਲ 545 ਟਾਈਟਲ 723 ਟਾਈਟਲ 610 ਟਾਈਟਲ 118 ਟਾਈਟਲ 482 ਟਾਈਟਲ 335 ਟਾਈਟਲ 271 ਟਾਈਟਲ 373

ਕਰਲੀ ਬ੍ਰੈਕਟਾਂ ('{', '}') ਦੇ ਅੰਦਰਲੇ ਬਿਆਨਾਂ ਦੀ ਸੂਚੀ ਨੂੰ ਬਲਾਕ ਕਿਹਾ ਜਾਂਦਾ ਹੈ. ਜੇ ਤੁਸੀਂ ਕਿਸੇ ਬਲਾਕ ਦੇ ਸਾਹਮਣੇ ਕੰਡੀਸ਼ਨਲ ਐਕਸਪਸ਼ਨ ਪਾਉਂਦੇ ਹੋ, ਤਾਂ ਬਲੌਕ ਦੇ ਅੰਦਰਲੇ ਸਟੇਟਮੈਂਟ ਨੂੰ ਤਾਂ ਹੀ ਲਾਗੂ ਕੀਤਾ ਜਾਵੇਗਾ ਜੇ ਕੰਡੀਸ਼ਨ ਸਹੀ ਹੋਵੇ.

awk '$ 7 == "\ $ 7.30" {print $ 3}' ਟੇਬਲ 1.txt

ਇਸ ਸਥਿਤੀ ਵਿੱਚ, ਸ਼ਰਤ $ 7 ਹੈ == "\ $ 7.30", ਜਿਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਕਾਲਮ 7 ਤੇ ਤੱਤ $ 7.30 ਦੇ ਬਰਾਬਰ ਹੈ. ਡਾਲਰ ਸੰਕੇਤ ਦੇ ਸਾਹਮਣੇ ਬੈਕਸਲੇਸ਼ ਨੂੰ ਪ੍ਰਣਾਲੀ ਨੂੰ $ 7 ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨ ਤੋਂ ਰੋਕਣ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਇਸਦੇ ਉਲਟ ਡਾਲਰ ਦੇ ਅੱਖਰ ਨੂੰ ਅਸਲ ਵਿੱਚ ਲੈਣਾ

ਇਸ ਲਈ ਇਹ ਅਜੀਬੋ ਸਟੇਟਮੈਂਟ ਹਰੇਕ ਲਾਈਨ ਦੇ ਤੀਜੇ ਕਾਲਮ ਤੇ ਤੱਤ ਪ੍ਰਿੰਟ ਕਰਦਾ ਹੈ ਜਿਸਦਾ ਕਾਲਮ 7 ਤੇ "$ 7.30" ਹੈ.

ਤੁਸੀਂ ਰੈਗੂਲਰ ਸਮੀਕਰਨ ਨੂੰ ਸ਼ਰਤ ਦੇ ਤੌਰ ਤੇ ਵੀ ਵਰਤ ਸਕਦੇ ਹੋ. ਉਦਾਹਰਣ ਲਈ:

awk '/ 30 / {ਪ੍ਰਿੰਟ $ 3}' ਟੇਬਲ 1.txt

ਦੋ ਸਲੈਸ਼ ('/') ਦੇ ਵਿਚਕਾਰ ਦੀ ਸਤਰ ਰੈਗੁਲਰ ਸਮੀਕਰਨ ਹੈ. ਇਸ ਕੇਸ ਵਿੱਚ, ਇਹ ਕੇਵਲ ਸਤਰ "30." ਹੈ ਇਸ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਜੇ ਇੱਕ ਲਾਈਨ ਵਿੱਚ ਸਤਰ "30" ਹੈ, ਤਾਂ ਸਿਸਟਮ ਉਸ ਲਾਈਨ ਦੇ ਤੀਜੇ ਕਾਲਮ ਤੇ ਤੱਤ ਪ੍ਰਿੰਟ ਕਰਦਾ ਹੈ. ਉਪਰੋਕਤ ਉਦਾਹਰਨ ਵਿੱਚ ਆਉਟਪੁੱਟ ਇਹ ਹੋਵੇਗੀ:

ਟਿੰਬਰਲੇਕ, ਗਾਗਾ, ਪ੍ਰੈਸਲੇ,

ਜੇ ਸਾਰਣੀ ਦੇ ਤੱਤ ਐਕਜ਼ੈਕਟ ਹਨ ਤਾਂ ਉਹ ਇਸ ਉਦਾਹਰਨ ਦੇ ਤੌਰ ਤੇ ਉਹਨਾਂ ਤੇ ਗਣਨਾ ਕਰ ਸਕਦੇ ਹਨ:

awk '{print ($ 2 * $ 3) + $ 7}'

ਮੌਜੂਦਾ ਮੁੱਲ ($ 1, $ 2, ਆਦਿ) ਦੇ ਤੱਤਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵਾਲੇ ਵੇਰੀਏਬਲਾਂ ਤੋਂ ਇਲਾਵਾ, $ 0, ਜੋ ਕਿ ਪੂਰੀ ਕਤਾਰ (ਲਾਈਨ), ਅਤੇ ਪਰਿਵਰਤਨਸ਼ੀਲ ਐਨਐਫ, ਜੋ ਕਿ ਖੇਤਰਾਂ ਦੀ ਸੰਖਿਆ ਤੇ ਹੈ, ਨੂੰ ਸੰਦਰਭਿਤ ਕਰਦਾ ਹੈ.

ਤੁਸੀਂ ਇਸ ਉਦਾਹਰਨ ਦੇ ਤੌਰ ਤੇ ਵੀ ਨਵੇਂ ਵੇਰੀਏਬਲ ਪਰਿਭਾਸ਼ਿਤ ਕਰ ਸਕਦੇ ਹੋ:

awk '{sum = 0; ਲਈ (col = 1; col <= NF; col ++) sum + = $ col; ਛਪਾਈ ਰਕਮ; } ''

ਇਹ ਹਰੇਕ ਲਾਈਨ ਦੇ ਸਾਰੇ ਤੱਤਾਂ ਦੀ ਗਣਨਾ ਕਰਦਾ ਹੈ ਅਤੇ ਪ੍ਰਿੰਟ ਕਰਦਾ ਹੈ.

Awk ਸਟੇਟਮੈਂਟਾਂ ਨੂੰ ਅਕਸਰ sed ਕਮਾਂਡਾਂ ਨਾਲ ਜੋੜਿਆ ਜਾਂਦਾ ਹੈ .