How does this awk script to delete blank and duplicate lines work?

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












-2















This awk command is used to delete blank and duplicate lines:



sort abc.log | awk 'LAST != $0 print LAST=$0'


I'd like to know how "LAST != $0" and "LAST=$0" are used and what do they do?










share|improve this question
























  • I has add exact need, and the confusion has been solved.

    – wang xiaoshi
    Jan 18 at 8:18















-2















This awk command is used to delete blank and duplicate lines:



sort abc.log | awk 'LAST != $0 print LAST=$0'


I'd like to know how "LAST != $0" and "LAST=$0" are used and what do they do?










share|improve this question
























  • I has add exact need, and the confusion has been solved.

    – wang xiaoshi
    Jan 18 at 8:18













-2












-2








-2








This awk command is used to delete blank and duplicate lines:



sort abc.log | awk 'LAST != $0 print LAST=$0'


I'd like to know how "LAST != $0" and "LAST=$0" are used and what do they do?










share|improve this question
















This awk command is used to delete blank and duplicate lines:



sort abc.log | awk 'LAST != $0 print LAST=$0'


I'd like to know how "LAST != $0" and "LAST=$0" are used and what do they do?







awk






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 18 at 14:51









Mr Shunz

3,47712127




3,47712127










asked Jan 16 at 2:52









wang xiaoshiwang xiaoshi

61




61












  • I has add exact need, and the confusion has been solved.

    – wang xiaoshi
    Jan 18 at 8:18

















  • I has add exact need, and the confusion has been solved.

    – wang xiaoshi
    Jan 18 at 8:18
















I has add exact need, and the confusion has been solved.

– wang xiaoshi
Jan 18 at 8:18





I has add exact need, and the confusion has been solved.

– wang xiaoshi
Jan 18 at 8:18










1 Answer
1






active

oldest

votes


















3














The sort command sorts the lines of abc.log. The result is that duplicate lines follow each other.



awk take this sorted file as input. It compares the current line (which is in $0) with the content of the variable LAST. Only if it is different (!=), the line is printed. The content of the current line is than stored in the variable LAST. So it can be compared in the next iteration.



NB: Instead of using this combination of sort and awk, just use sort -u abc.log to remove duplicate lines.






share|improve this answer


















  • 2





    One small difference, alluded to in the Q: since awk vars are initialized to the empty string (also treated as numeric zero), the awk also deletes any empty lines (which sort puts first), but sort -u does not, although sort -u | grep . does.

    – dave_thompson_085
    Jan 16 at 6:26












  • thank you! this can explain how awk to delete duplicate records.

    – wang xiaoshi
    Jan 16 at 6:58











  • This solved my confusion.

    – wang xiaoshi
    Jan 18 at 8:13











  • Indeed, if the input includes empty lines and you sort -r and pipe to that awk, you get an empty line at the end of the output. If you just sort, you don't. It is probably worth editing your answer, adding the information from dave_thompson_085's comment.

    – fra-san
    Jan 18 at 15:04










Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f494714%2fhow-does-this-awk-script-to-delete-blank-and-duplicate-lines-work%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









3














The sort command sorts the lines of abc.log. The result is that duplicate lines follow each other.



awk take this sorted file as input. It compares the current line (which is in $0) with the content of the variable LAST. Only if it is different (!=), the line is printed. The content of the current line is than stored in the variable LAST. So it can be compared in the next iteration.



NB: Instead of using this combination of sort and awk, just use sort -u abc.log to remove duplicate lines.






share|improve this answer


















  • 2





    One small difference, alluded to in the Q: since awk vars are initialized to the empty string (also treated as numeric zero), the awk also deletes any empty lines (which sort puts first), but sort -u does not, although sort -u | grep . does.

    – dave_thompson_085
    Jan 16 at 6:26












  • thank you! this can explain how awk to delete duplicate records.

    – wang xiaoshi
    Jan 16 at 6:58











  • This solved my confusion.

    – wang xiaoshi
    Jan 18 at 8:13











  • Indeed, if the input includes empty lines and you sort -r and pipe to that awk, you get an empty line at the end of the output. If you just sort, you don't. It is probably worth editing your answer, adding the information from dave_thompson_085's comment.

    – fra-san
    Jan 18 at 15:04















3














The sort command sorts the lines of abc.log. The result is that duplicate lines follow each other.



awk take this sorted file as input. It compares the current line (which is in $0) with the content of the variable LAST. Only if it is different (!=), the line is printed. The content of the current line is than stored in the variable LAST. So it can be compared in the next iteration.



NB: Instead of using this combination of sort and awk, just use sort -u abc.log to remove duplicate lines.






share|improve this answer


















  • 2





    One small difference, alluded to in the Q: since awk vars are initialized to the empty string (also treated as numeric zero), the awk also deletes any empty lines (which sort puts first), but sort -u does not, although sort -u | grep . does.

    – dave_thompson_085
    Jan 16 at 6:26












  • thank you! this can explain how awk to delete duplicate records.

    – wang xiaoshi
    Jan 16 at 6:58











  • This solved my confusion.

    – wang xiaoshi
    Jan 18 at 8:13











  • Indeed, if the input includes empty lines and you sort -r and pipe to that awk, you get an empty line at the end of the output. If you just sort, you don't. It is probably worth editing your answer, adding the information from dave_thompson_085's comment.

    – fra-san
    Jan 18 at 15:04













3












3








3







The sort command sorts the lines of abc.log. The result is that duplicate lines follow each other.



awk take this sorted file as input. It compares the current line (which is in $0) with the content of the variable LAST. Only if it is different (!=), the line is printed. The content of the current line is than stored in the variable LAST. So it can be compared in the next iteration.



NB: Instead of using this combination of sort and awk, just use sort -u abc.log to remove duplicate lines.






share|improve this answer













The sort command sorts the lines of abc.log. The result is that duplicate lines follow each other.



awk take this sorted file as input. It compares the current line (which is in $0) with the content of the variable LAST. Only if it is different (!=), the line is printed. The content of the current line is than stored in the variable LAST. So it can be compared in the next iteration.



NB: Instead of using this combination of sort and awk, just use sort -u abc.log to remove duplicate lines.







share|improve this answer












share|improve this answer



share|improve this answer










answered Jan 16 at 5:59









finswimmerfinswimmer

3596




3596







  • 2





    One small difference, alluded to in the Q: since awk vars are initialized to the empty string (also treated as numeric zero), the awk also deletes any empty lines (which sort puts first), but sort -u does not, although sort -u | grep . does.

    – dave_thompson_085
    Jan 16 at 6:26












  • thank you! this can explain how awk to delete duplicate records.

    – wang xiaoshi
    Jan 16 at 6:58











  • This solved my confusion.

    – wang xiaoshi
    Jan 18 at 8:13











  • Indeed, if the input includes empty lines and you sort -r and pipe to that awk, you get an empty line at the end of the output. If you just sort, you don't. It is probably worth editing your answer, adding the information from dave_thompson_085's comment.

    – fra-san
    Jan 18 at 15:04












  • 2





    One small difference, alluded to in the Q: since awk vars are initialized to the empty string (also treated as numeric zero), the awk also deletes any empty lines (which sort puts first), but sort -u does not, although sort -u | grep . does.

    – dave_thompson_085
    Jan 16 at 6:26












  • thank you! this can explain how awk to delete duplicate records.

    – wang xiaoshi
    Jan 16 at 6:58











  • This solved my confusion.

    – wang xiaoshi
    Jan 18 at 8:13











  • Indeed, if the input includes empty lines and you sort -r and pipe to that awk, you get an empty line at the end of the output. If you just sort, you don't. It is probably worth editing your answer, adding the information from dave_thompson_085's comment.

    – fra-san
    Jan 18 at 15:04







2




2





One small difference, alluded to in the Q: since awk vars are initialized to the empty string (also treated as numeric zero), the awk also deletes any empty lines (which sort puts first), but sort -u does not, although sort -u | grep . does.

– dave_thompson_085
Jan 16 at 6:26






One small difference, alluded to in the Q: since awk vars are initialized to the empty string (also treated as numeric zero), the awk also deletes any empty lines (which sort puts first), but sort -u does not, although sort -u | grep . does.

– dave_thompson_085
Jan 16 at 6:26














thank you! this can explain how awk to delete duplicate records.

– wang xiaoshi
Jan 16 at 6:58





thank you! this can explain how awk to delete duplicate records.

– wang xiaoshi
Jan 16 at 6:58













This solved my confusion.

– wang xiaoshi
Jan 18 at 8:13





This solved my confusion.

– wang xiaoshi
Jan 18 at 8:13













Indeed, if the input includes empty lines and you sort -r and pipe to that awk, you get an empty line at the end of the output. If you just sort, you don't. It is probably worth editing your answer, adding the information from dave_thompson_085's comment.

– fra-san
Jan 18 at 15:04





Indeed, if the input includes empty lines and you sort -r and pipe to that awk, you get an empty line at the end of the output. If you just sort, you don't. It is probably worth editing your answer, adding the information from dave_thompson_085's comment.

– fra-san
Jan 18 at 15:04

















draft saved

draft discarded
















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f494714%2fhow-does-this-awk-script-to-delete-blank-and-duplicate-lines-work%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown






Popular posts from this blog

How to check contact read email or not when send email to Individual?

Bahrain

Postfix configuration issue with fips on centos 7; mailgun relay